package org.SimpleSpringBoot.config;

import org.SimpleSpringBoot.annotation.Controller;
import org.SimpleSpringBoot.container.ApplicationContext;
import org.SimpleSpringBoot.container.BeanDefinition;
import org.SimpleSpringBoot.web.RestController;
import org.SimpleSpringBoot.web.SimpleWebServer;

/**
 * 自动配置类，负责自动装配各种组件
 */
public class AutoConfiguration {

    /**
     * 执行自动装配
     */
    public void configure(ApplicationContext applicationContext){
        //检查是否需要配置web服务器
        if (shouldConfigureWebServer(applicationContext)){
            configureWebServer(applicationContext);
        }
    }

    /**
     * 判断是否需要配置web服务器
     * @param applicationContext
     * @return
     */
    private boolean shouldConfigureWebServer(ApplicationContext applicationContext) {
        //如果存在controller组件，则需要web服务器
        for (BeanDefinition beanDefinition:applicationContext.getBeanFactory().getAllBeanDefinitions().values()){
            Class<?> beanClass = beanDefinition.getBeanClass();
            if (beanClass.isAnnotationPresent(RestController.class)||
                beanClass.isAnnotationPresent(org.SimpleSpringBoot.annotation.Controller.class)){
                return true;
            }
        }
        return true;
    }

    /**
     * 配置web服务器
     */
    private void configureWebServer(ApplicationContext applicationContext){
        System.out.println("自动配置web服务器");

        //创建web服务器Bean
        SimpleWebServer webServer = new SimpleWebServer(applicationContext);
        BeanDefinition webServerBeanDefinition = new BeanDefinition("webServer", SimpleWebServer.class);
        webServerBeanDefinition.setInstance(webServer);

        //注册到容器中
        applicationContext.getBeanFactory().registerBeanDefinnition("webServer",webServerBeanDefinition);

        //启动web服务器
        try {
            webServer.start(8889);
        }catch (Exception e){
            System.out.println("启动web服务器失败"+e.getMessage());
        }
    }

}
